#include <iostream>
#include <string>
using namespace std;

class Shape {
public:
    virtual void show_area() = 0;
};

class Circle : public Shape {
public:
    Circle(float ra) : radius(ra){};
    ~Circle(){};
    void show_area()
    {
        cout << "Circle area = " << 3.14 * 3.14 * radius << endl;
    }
private:
    float radius;
};

class Rectangle : public Shape {
public:
    Rectangle(int len, int wid) : length(len), width(wid){};
    ~Rectangle(){};
    void show_area()
    {
        cout << "this is Rectangle = " << length * width << endl;
    }
private:
    int length;
    int width;
};

class Triangle : public Shape {
public:
    Triangle(int len, int wid, int hi) : length(len), width(wid), high(hi){};
    ~Triangle(){};
    void show_area()
    {
        cout << "this is Triangle = " << length * width * high << endl;
    }
private:
    int length;
    int width;
    int high;
};

class Square : public Shape {
public:
    Square(int len) : length(len){};
    ~Square(){};
    void show_area()
    {
        cout << "this is Square = " << length *length << endl;
    }
private:
    int length;
};

class Point {
public:
    Point(int px, int py) : x(px), y(py){};
    ~Point()
    {
        cout << "this is ~Point" << endl;
    }
    virtual void show_area() = 0;
private:
    int x;
    int y;
};
class Circle2 : public Point {
public:
    Circle2(int x, int y, int ra) : Point(x, y), radius(ra) {};
    ~Circle2()
    {
        cout << "this is ~Circle" << endl;
    }
    void show_area()
    {
        cout << "area = " << 3.14 * 3.14 * radius << endl;
    }
private:
    int radius;
};